package itsm.isperp.module.repository.app;

import itsm.isperp.framework.data.mybatis.dao.CUDMapper;
import itsm.isperp.framework.domain.IRole;
import itsm.isperp.module.entity.app.AppUser;
import itsm.isperp.module.entity.app.AppUserRole;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

/**
 * 
 * 系统用户角色映射器
 * 
 * @author lizx
 * @date 2013-1-12
 * @date 2013-8-20 增加findRoleMembersMap及findRoleMembers方法
 * @version V1.0
 * 
 */
@Repository
public interface AppUserRoleMapper extends CUDMapper<AppUserRole> {

	/**
	 * 批量保持用户的角色列表
	 * 
	 * @param username
	 *            用户名
	 * @param roles
	 *            角色列表
	 */
	public void saveBatch(@Param("username") String username,
			@Param("roles") List<? extends IRole> roles);

	/**
	 * 根据用户名查询用户角色实体列表
	 * 
	 * @param username
	 *            用户名
	 * @return 用户角色实体列表
	 */
	public List<AppUserRole> findByUsername(@Param("username") String username);

	/**
	 * 根据用户查询用户的相关角色信息
	 * 
	 * @param username
	 *            用户名
	 */
	public void deleteByUsername(@Param("username") String username);

	/**
	 * 根据角色id删除关联的用户角色信息
	 * 
	 * @param roleId
	 *            角色id
	 */
	public void deleteByRoleId(@Param("roleId") String roleId);

	/**
	 * 删除指定用户的某个角色
	 * 
	 * @param userName
	 *            用户帐号
	 * @param roleId
	 *            角色ID
	 */
	public void deleteByUserNameAndRoleId(@Param("username") String userName,
			@Param("roleId") String roleId);

	/**
	 * 取得角色下所有人员的指定列的Map列表
	 * 
	 * @param roleId
	 *            角色ID
	 * @param selectColumns
	 *            指定列数组
	 * @return 指定列的Map列表
	 */
	public List<Map<String, Object>> findRoleMembersMap(
			@Param("roleId") String roleId,
			@Param("selectColumns") String... selectColumns);

	/**
	 * 取得指定角色下的所有用户帐户
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 人员列表
	 */
	public List<AppUser> findRoleMembers(@Param("roleId") String roleId,
			@Param("appDepartmentId") String appDepartmentId);

}
